import Vue from 'vue';
import request from '@/common/request.js';
import config from '@/common/config.js';
export default {
	namespaced: true,
	state: {
		reconnections: 0,
		isclose:''
	},
	mutations: {

	},
	actions: {
		// 开始或重启即时通讯，全局监听，主要用于系统消息提示
		async start({
			state,
			dispatch,
			rootState
		}) {
			if (!rootState.token) return
			// 如果已连接，关闭重新连接
			if (state.isclose)uni.closeSocket()
			// 在接口内获取链接
			let socketurl = rootState.config?.socket_url || ''
			if (!socketurl) {
				let configFn = () =>dispatch('start')
				uni.$off('config', configFn)
				uni.$once('config', configFn)
				return
			}
			console.log('Socket地址:', socketurl);
			// 创建一个 WebSocket 连接
			uni.connectSocket({
				url: socketurl
			});
			// 监听 WebSocket 连接打开事件
			uni.onSocketOpen((res) => {
				console.log('Socket 连接已打开！')
				state.isclose = true;
			});
			// 监听 WebSocket 连接关闭事件
			uni.onSocketClose((res) => {
				console.log('Socket 已关闭！')
				state.isclose = false;
			});
			// 监听WebSocket错误。
			uni.onSocketError((err) => {
				console.log(err);
			});
			uni.onSocketMessage((res) => {
				let data = JSON.parse(res.data);
				// console.log(data);
				if (data.type == 'init') { // 初始化
					// 绑定 client_id 到 uid
					request('/member/message/shake', {
						'client_id': data.client_id
					}).then(res => {
						// uni.setStorageSync("wanlshop:chat_client_id", res);
					})
				} else if (data.type == 'ping') { // 心跳回执
					// 通过 WebSocket 连接发送数据
					// uni.sendSocketMessage({
					// 	data: '{"type":"pong"}'
					// });
				} else if (data.type == 'chat') {
					// 全局通知
					uni.$emit('$onChat', data);
				} else {
					console.log("未知消息: " + JSON.stringify(data))
				}
			});
			// 获取一次聊天列表
		},
		async close() {
			uni.closeSocket();
		}
	}
};
